自動更新
NW.js 傾向於支援社群建立的更新解決方案,而非內建的解決方案。以下是現有解決方案的清單,值得查看。
- node-webkit-updater(由 @edjafarov 建立)
- nwjs-autoupdater(由 @oaleynik 建立)
- nw-autoupdater(由 @dsheiko 建立)
node-webkit-updater
NPM 模組,提供低階 API 給您,讓您能
- 從正在執行的「舊」應用程式檢查明細的版本。
- 如果版本與正在執行的版本不同,請下載新套件至暫存目錄。
- 在暫存中解壓縮套件。
- 從暫存中執行新應用程式,並關閉舊應用程式(即仍來自正在執行的應用程式)。
- 新應用程式(在暫存中)會將自己複製到原始資料夾,覆寫舊應用程式。
- 新應用程式會從原始資料夾執行自己,並結束程序。
不過,您應該自行建構此邏輯(基本範例)。
nwjs-autoupdater
微小的 Golang 應用程式(建置後僅約 2MB),可與 NW.js 應用程式捆綁,然後用於解壓縮更新。
若要更新目標應用程式,更新程式需要知道兩件事 - 新版本的 zip 檔案位於何處,以及應用程式的可執行檔位於何處,以便在更新後重新啟動應用程式。這些資訊可透過命令列引數 --bundle
和 --inst-dir
傳遞給更新程式,其中 --bundle
是指向包含新應用程式版本的 zip 檔案的路徑,而 --inst-dir
是指向應用程式可執行檔的路徑。
相較於 node-webkit-updater
,有多項優點
- 它可以更新更新程式本身。
- 不需要提升的權限(除非應用程式本身已安裝在需要提升權限的資料夾中)。
- 更新程式的可執行檔大小較小,因為它不需要將整個新的 NW.js 應用程式與主應用程式捆綁在一起。
您也需要自行建構檢查更新的邏輯。範例說明如何使用 JavaScript 模組作為 NW.js 應用程式的進入點,並在背景中檢查更新。
nw-autoupdater
NPM 模組提供的 API 類似於 node-webkit-updater
,但已擴充,適用於使用 Node 7.x 的 NW.js,並基於簡潔的非同步/等待語法。具體來說,它允許
- 從遠端發布伺服器讀取清單
- 檢查遠端清單中的版本是否大於其中一個本機清單
- 下載與主機平台相符的最新可用版本(根據遠端清單的 packages
地圖)
- 訂閱下載進度事件
- 在暫時目錄中解壓縮(zip 或 tar.gz)
- 訂閱安裝進度事件
- 關閉應用程式,並從下載的發布版本(從暫時目錄)啟動它(作為分離的程序)
- 備份實際版本,並以新版本取代它
- 從其原始位置重新啟動已更新的應用程式
此套件包含發布伺服器和用戶端範例。